


//
//  BaseViewController.m
//  NeiHanDemo
//
//  Created by qianfeng on 16/2/19.
//  Copyright © 2016年 王卓越. All rights reserved.
//

#import "BaseViewController.h"
#import "Define.h"
#import "NHCommonTableViewCell.h"
#import "NHNetEngine.h"
#import "NHCommonModel.h"
#import "JHRefresh.h"

@interface BaseViewController ()

@property (nonatomic) BOOL isRefreshing;

@end

@implementation BaseViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    self.dataSource = [NSMutableArray array];

    [self customNavigationBar];
    [self.view addSubview:self.tableView];
    //添加下拉刷新和上拉加载更多
    [self addRefreshHeadView];
    [self addRefreshFootView];
    //下载数据
    [self fetchNetData];
    
}

- (void)customNavigationBar{
//    UIImage *image = [UIImage imageNamed:@"bg_navbar_blue@2x"];
//    //拉伸图片 ？？？？
//    image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(20, 20, 20, 200) resizingMode:UIImageResizingModeStretch];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bg_navbar_blue@2x"] forBarMetrics:UIBarMetricsDefault];

}

//通过懒加载机制创建 tableView
- (UITableView *)tableView{
    if (_tableView == nil) {
        //上方 状态栏         ->20
        //上方 navigationBar ->44
        //下方 tabBar        ->49
        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - 20 - 44 - 49)];
        _tableView.dataSource = self;
        _tableView.delegate = self;
        _tableView.estimatedRowHeight = 44;
        
        [self registTableViewCell];
    }
    return _tableView;
}


- (void)registTableViewCell{
    UINib *nib = [UINib nibWithNibName:@"NHCommonTableViewCell" bundle:nil];
    [self.tableView registerNib:nib forCellReuseIdentifier:@"cellID"];
}

#pragma mark - UITableViewDataSource
//下面2个代理方法，是屏幕显示多少个cell，就调用多少次
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.dataSource.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    //注意 在xib中 右边箭头属性 下方的identifier 中要填写 cellID，否则即使复用池中有符合条件的cell也不会重复使用，只会重写创建，消耗内存
    NHCommonTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"cellID" forIndexPath:indexPath];
    
    //这一行对应的数据model
    NHCommonModel *model = self.dataSource[indexPath.row];
    //使用model 更新cell
    [cell updateWithModel:model];
    return cell;
}

////计算cell高度，有多少行就会调用多少次
//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
//    NHCommonModel *model = [self.dataSource objectAtIndex:indexPath.row];
//    return [NHCommonTableViewCell calculteCellHeight:model];
//}

//下拉刷新
- (void)addRefreshHeadView{
    __weak typeof(self)weakSelf = self;
    [self.tableView addRefreshHeaderViewWithAniViewClass:[JHRefreshAmazingAniView class] beginRefresh:^{
        //注意存在强强引用
        if (weakSelf.isRefreshing == YES) {
            return ;
        }
        weakSelf.isRefreshing = YES;
        [weakSelf doRefresh];
    }];
    
}

//上拉加载更多
- (void)addRefreshFootView{
    //
    //typeof(self) -> 获取self的类型
    //
//    __weak typeof(self)weakSelf = self; 也可写成下面形式
    __weak BaseViewController *weakSelf = self;
    [self.tableView addRefreshFooterViewWithAniViewClass:[JHRefreshAmazingAniView class] beginRefresh:^{
        if (weakSelf.isRefreshing == YES) {
            return ;
        }
        weakSelf.isRefreshing = YES;
        [weakSelf doLoadMore];
    }];
}

//停止刷新
- (void)endRefreshing{
    self.isRefreshing = NO;
    [self.tableView headerEndRefreshingWithResult:JHRefreshResultSuccess];
    [self.tableView footerEndRefreshing];
}

#pragma mark - fetchNetData 网络数据加载
- (void)doRefresh{
    self.page = 0;
    [self fetchNetData];
}


- (void)doLoadMore{
    self.page ++;
    [self fetchNetData];
}

//composeRequestUrl  拼接URL
// 页面从第0页开始30条开始，然后是第1页15条，第2页15条...
// max_timestamp 第0页，或者下拉刷新，值为-1，否则，为最后一个条目的update_time字段的值!(特别注意)
//-1 用于下拉刷新  page == 0 下拉刷新 最多刷新30条
//上拉加载 的时候max_timestamp应该是 数据源中最后一条数据的时间
//默认加载15条

- (NSString *)composeRequestUrl{
    if (self.page == 0) {
        self.itemCount = 30;
        self.max_timeStmp = @"-1";
    }else{
        self.itemCount = 15;
    }
    return [NSString stringWithFormat:CONTENTS_URL, self.category, self.page, self.itemCount, self.max_timeStmp];
}

- (void)fetchNetData{
//    NSLog(@"%@", self.category);
//    NSString *url = [NSString stringWithFormat:CONTENTS_URL, self.category, 0l, 30l, @"-1"];
//    NSLog(@"%@", url);
    
    //composeRequestUrl  拼接URL
    NSString *url = [self composeRequestUrl];
    
    [[NHNetEngine sharedInstance] request:url success:^(id respondData) {
    //得到数据
//    NSLog(@"%@", respondData);
        if (self.page == 0) {
            [self.dataSource removeAllObjects];
        }
        
    //解析数据
    [self parseResponseData:respondData];
    //记录最后一个条目的更新日期
    [self recordLastUpdateTime];
    //刷表
    [self.tableView reloadData];
    //结束刷新
    [self endRefreshing];
    
 } falied:^(NSError *error) {
    //错误处理
    NSLog(@"%@", error);
 }];

}

//记录最后一个条目的时间
- (void)recordLastUpdateTime{
    NHCommonModel *model = [self.dataSource lastObject];
    self.max_timeStmp = model.update_time;
}

//当父类的方法不能满足子类的需求时，子类可以通过重写该方法来满足自己的需求
-(void)parseResponseData:(NSDictionary *)dic{
    NSArray *modelArray = dic[@"items"];
    for (NSDictionary *itemDic in modelArray) {
        NHCommonModel *model = [[NHCommonModel alloc] init];
        [model setValuesForKeysWithDictionary:itemDic];
        [self.dataSource addObject:model];
    }
}

@end
